package com.ssm.listen;

import com.ssm.util.IniUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;
import java.io.File;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;

/**
 * ini文件监听
 */
@Component
@Slf4j
public class IniListener {

    //随着项目启动不断监听ini文件
    public Map<Integer, String> onApplicationEvent(File file) {

            try {
                //获取ini中的内容
                Map<String, Map<String, String>> map =
                        IniUtil.readIni(file);
                //获取ini中的时间策略
                String time_Hours = map.get("cinding").get("time_Hours");
                //将时间策略拆分成数组,数组个数位设备个数
                String [] sarr = StringUtils.split(time_Hours, "|");

                //声明设备id集合
                Map<Integer, String> zmap = new HashMap<>();
                //声明当前时间
                Date now = new Date();
                String nowstr = new SimpleDateFormat("yyyy-MM-dd").format(now);

                //根据时间策略控制设置曝气控制指令
                for (int i = 0;i < sarr.length;i++) {
                    //每个指令#前面的为设备id
                    int equipId = Integer.parseInt(StringUtils.substringBefore(sarr[i],
                            "#"));
                    //#后面的为时间指令
                    String cmd = StringUtils.substringAfter(sarr[i], "#");
                    //将时间指令用逗号拆成多组
                    String [] cmdArr = StringUtils.split(cmd, ",");
                    //指令默认关闭
                    String zl = "000100000006ff0500640000";
                    //判断指令开关规则
                    for (String c : cmdArr) {
                        //自动时间控制指令
                        String [] time = StringUtils.split(c, "-");

                        String s = nowstr + " " + time[0];
                        String e = nowstr + " " + time[1];
                        //格式化时间
                        Date start = new SimpleDateFormat("yyyy-MM-dd HH:mm").parse(s);
                        Date end = new SimpleDateFormat("yyyy-MM-dd HH:mm").parse(e);

                        //判断时间是否在范围内
                        if (now.after(start) && now.before(end)) {
                            zl = "000100000006ff050064ff00";
                            break;
                        }

                    }
                    zmap.put(equipId, zl);
                }
                return zmap;
            } catch (IOException | RuntimeException | ParseException e) {
                e.printStackTrace();
            }
            return new HashMap<>();
    }
}
